/**
 * 权限控制工具
 */

/**
 * 检查是否有权限
 * @param {String} permission 权限代码
 * @param {Array} permissions 权限列表
 * @returns {Boolean} 是否有权限
 */
export function hasPermission(permission, permissions) {
    if (!permission || !permissions) {
        return false;
    }
    
    // 检查权限数组中是否包含该权限
    if (permissions.includes(permission)) {
        return true;
    }
    
    // 检查通配符权限
    for (const p of permissions) {
        if (p.endsWith('*')) {
            const prefix = p.slice(0, -1);
            if (permission.startsWith(prefix)) {
                return true;
            }
        }
    }
    
    return false;
}

/**
 * 获取用户权限列表
 * @returns {Array} 权限列表
 */
export function getUserPermissions() {
    const permissionsStr = localStorage.getItem('permissions');
    if (!permissionsStr) {
        return [];
    }
    
    return JSON.parse(permissionsStr);
}

/**
 * 获取用户角色列表
 * @returns {Array} 角色列表
 */
export function getUserRoles() {
    const rolesStr = localStorage.getItem('userRoles');
    if (!rolesStr) {
        return [];
    }
    
    return JSON.parse(rolesStr);
}

/**
 * 检查用户是否有指定权限
 * @param {String} permission 权限代码
 * @returns {Boolean} 是否有权限
 */
export function checkPermission(permission) {
    const permissions = getUserPermissions();
    return hasPermission(permission, permissions);
}

/**
 * 检查用户是否有指定角色
 * @param {String} role 角色代码
 * @returns {Boolean} 是否有角色
 */
export function checkRole(role) {
    const roles = getUserRoles();
    return roles.includes(role);
}

/**
 * 创建权限指令
 * @param {Object} app Vue应用实例
 */
export function setupPermissionDirective(app) {
    // 注册 v-permission 指令
    app.directive('permission', {
        mounted(el, binding) {
            // 获取指令的值（权限代码）
            const { value } = binding;
            
            // 检查权限
            if (value && !checkPermission(value)) {
                // 如果没有权限，移除元素
                el.parentNode && el.parentNode.removeChild(el);
            }
        }
    });
    
    // 注册 v-role 指令
    app.directive('role', {
        mounted(el, binding) {
            // 获取指令的值（角色代码）
            const { value } = binding;
            
            // 检查角色
            if (value && !checkRole(value)) {
                // 如果没有角色，移除元素
                el.parentNode && el.parentNode.removeChild(el);
            }
        }
    });
} 